所以我得到了pycharm专业版。它非常值得,因为我坚持使用Windows atm,pycharm非常棒,它帮助我绕过了遇到Windows的所有障碍。我遇到的最好的工具。因此,我想要执行许可的方式是创建一个可以保存许可证的服务器。
我想用Docker
执行此操作,创建一个在后台运行服务器的docker container
。因此,在我阅读的教程中,他们建议使用Arch
linux作为Linux服务器来运行许可证服务器。这就是我所做的。但我没有使用裸骨拱,而是使用安全升级版。以下是基础图像:
nning2/compile-linux-grsec
到目前为止,这是我的Dockerfile:
FROM nning2/compile-linux-grsec
ENV APP_ROOT /app
ENV SERVER_DIR /opt/dvt-jb-lic-server
ENV SERVER_BINARY dvt-jb_licsrv.linux.amd64
ENV SERVER_BINARY_PATH "${SERVER_ROOT}/${SERVER_BINARY}"
ENV COMPOSE_CONVERT_WINDOWS_PATHS 1
RUN mkdir -p $APP_ROOT
WORKDIR $APP_ROOT
VOLUME [".:/app"]
ADD "./${SERVER_BINARY}" $APP_ROOT
RUN mkdir -p $SERVER_DIR
RUN cp "${APP_ROOT}/${SERVER_BINARY}" $SERVER_BINARY_PATH
RUN chmod +x $SERVER_BINARY_PATH
RUN ls -l $SERVER_DIR
RUN $SERVER_BINARY_PATH -mode install
所以现在我只需要使docker-compose.yml
文件在后台运行许可证服务器。这是我到目前为止所得到的:
version: '2'
services:
shell:
build: .
command: /bin/bash service license-server
ports:
- "1337:1337"
当我运行docker-compose build .
时,它会输出:
$ docker-compose build --force-rm --no-cache
Building shell
Step 1 : FROM nning2/compile-linux-grsec
---> baf47265c7fc
Step 2 : ENV APP_ROOT /app
---> Running in 77d33bfe8848
---> 67afb97c5b46
Removing intermediate container 77d33bfe8848
Step 3 : ENV SERVER_DIR /opt/dvt-jb-lic-server
---> Running in c1b0615d8bec
---> 1bc7ac4a8b78
Removing intermediate container c1b0615d8bec
Step 4 : ENV SERVER_BINARY dvt-jb_licsrv.linux.amd64
---> Running in be4210954aaa
---> ce48dd70acbb
Removing intermediate container be4210954aaa
Step 5 : ENV SERVER_BINARY_PATH "${SERVER_ROOT}/${SERVER_BINARY}"
---> Running in 9e1a0aa39855
---> a1c99aad2418
Removing intermediate container 9e1a0aa39855
Step 6 : ENV COMPOSE_CONVERT_WINDOWS_PATHS 1
---> Running in 2a9337698969
---> dae5eff0e382
Removing intermediate container 2a9337698969
Step 7 : RUN mkdir -p $APP_ROOT
---> Running in ffe6894f4d15
---> 2c9bfd607bc0
Removing intermediate container ffe6894f4d15
Step 8 : WORKDIR $APP_ROOT
---> Running in 5404c27b138c
---> a607eaed217e
Removing intermediate container 5404c27b138c
Step 9 : VOLUME .:/app
---> Running in ad577ac00c9e
---> 2fe4a66ba1ed
Removing intermediate container ad577ac00c9e
Step 10 : ADD "./${SERVER_BINARY}" $APP_ROOT
---> 5ec55e991fba
Removing intermediate container 55ae3d52227f
Step 11 : RUN mkdir -p $SERVER_DIR
---> Running in d76e590f011a
---> b379ef02ab88
Removing intermediate container d76e590f011a
Step 12 : RUN cp "${APP_ROOT}/${SERVER_BINARY}" $SERVER_BINARY_PATH
---> Running in 5e0d782f4549
---> 802eeb561b62
Removing intermediate container 5e0d782f4549
Step 13 : RUN chmod +x $SERVER_BINARY_PATH
---> Running in 64c79436824c
---> c67396e5a721
Removing intermediate container 64c79436824c
Step 14 : RUN ls -l $SERVER_DIR
---> Running in 0cda941ffc29
total 0
---> a94136235d9d
Removing intermediate container 0cda941ffc29
Step 15 : RUN $SERVER_BINARY_PATH -mode install
---> Running in d9bfeb3ae871
[91m2017/02/05 02:34:38 Installing license server as service.
2017/02/05 02:34:38 open /etc/init.d/JetBrainsLicServerDVT: no such file or directory
2017/02/05 02:34:38 Errors while installing the license server. Are you running this as root/Administrator?
[0m ---> a08092892872
Removing intermediate container d9bfeb3ae871
Successfully built a08092892872
所以一切顺利,直到它试图安装二进制文件。由于某种原因,它没有安装/etc/init.d/JetBrainsLicServerDVT
文件。我是Arch的新手,所以不知道管理员权限是如何工作的。我似乎有超级用户权限,因为我可以将二进制文件复制到/ opt目录并执行其他需要超级用户权限的事情。
我是Arch
的新用户,Ubuntu
我会使用sudo
,但我不知道这是否适用于Arch。我是否需要以超级用户权限安装许可证服务器二进制文件?
更新:我以交互方式登录容器,看看发生了什么。所以看起来这个arch发行版甚至没有/etc/init.d
目录。所以安装这个二进制文件并不起作用。但是当我只运行没有任何参数的二进制文件时:
[root@b140eac75b52 app]# ./dvt-jb_licsrv.linux.amd64
2017/02/05 03:18:50 Starting license server.
2017/02/05 03:18:50
_____ . +
_____ \ | : ,`
________\ |___________________ |____l____ _
/ . | | /___ \_|____/___
\___________\_|\ /` / / | /y!r
--------------``----\_____/ /\__________/ ------
____\ `~~~~----/ `----------` /____
\_____/( DVT JetBrains License Server v1.1 )\____/
2017/02/05 03:18:50 [!] Server running at: http://127.0.0.1:1337
2017/02/05 03:18:50 [!] Stop the license server with Ctrl+C
2017/02/05 03:18:50 [?] For advanced usage refer to --help
服务器运行。我希望能够正确安装它,这样我就可以轻松启动并重新启动服务(即使用service start license-server
),但是如果它有效,它就可以工作,所以我不能抱怨。我不知道为什么他们坚持使用拱门,因为它实际上并没有在拱门中正确安装。
所以我决定尝试创建/etc/init.d
目录,然后再次尝试安装二进制文件,它起作用了:
[root@b140eac75b52 app]# mkdir /etc/init.d
[root@b140eac75b52 app]# ./dvt-jb_licsrv.linux.amd64 -mode install
2017/02/05 03:41:30 Installing license server as service.
2017/02/05 03:41:30 Successfully installed license server service.
并确保其正常运作:
[root@b140eac75b52 app]# /etc/init.d/JetBrainsLicServerDVT restart
Stopping JetBrainsLicServerDVT..
Stopped
Starting JetBrainsLicServerDVT
答案 0 :(得分:1)
/etc/init.d/license_server start
运行容器。当我检查运行docker ps
的容器时,没有正在运行的容器。我可以自己运行带有/bin/bash
的容器,根据kitematic,容器正在运行,它应该可以通过转发端口访问:
https://i.gyazo.com/1de96b014cfbc78f4c188ec33f336519.png
但如果我ping那个IP和端口,我得到:
Ping请求找不到主机192.168.99.100:1337。请检查 名字然后再试一次。
我将Docker与VirtualBox一起使用,并且没有为VM显示转发端口。我尝试添加它们手动,但没有改变。
问题是/etc/init.d
文件夹不存在。所以要修复它,我刚刚创建了文件夹,现在二进制安装正确:
[root@b140eac75b52 app]# mkdir /etc/init.d
[root@b140eac75b52 app]# ./dvt-jb_licsrv.linux.amd64 -mode install
2017/02/05 03:41:30 Installing license server as service.
2017/02/05 03:41:30 Successfully installed license server service.
现在我可以轻松启动,停止并重新启动服务器:
[root@b140eac75b52 app]# /etc/init.d/JetBrainsLicServerDVT restart
Stopping JetBrainsLicServerDVT..
Stopped
Starting JetBrainsLicServerDVT
所以改进的Dockerfile
是:
FROM nning2/compile-linux-grsec
ENV APP_ROOT /app
ENV SERVER_DIR /opt/dvt-jb-lic-server
ENV SERVER_BINARY dvt-jb_licsrv.linux.amd64
ENV SERVER_BINARY_PATH "${SERVER_ROOT}/${SERVER_BINARY}"
ENV COMPOSE_CONVERT_WINDOWS_PATHS 1
RUN mkdir -p $APP_ROOT
WORKDIR $APP_ROOT
VOLUME [".:/app"]
ADD "./${SERVER_BINARY}" $APP_ROOT
RUN mkdir -p $SERVER_DIR
RUN mv "${APP_ROOT}/${SERVER_BINARY}" $SERVER_BINARY_PATH
RUN chmod +x $SERVER_BINARY_PATH
RUN mkdir /etc/init.d
RUN $SERVER_BINARY_PATH -mode install
RUN mv "/etc/init.d/${SERVER_BINARY}" /etc/init.d/pycharm_license
和docker-compose.yml
文件:
version: '2'
services:
license_server:
environment:
ENV COMPOSE_CONVERT_WINDOWS_PATHS: 1
build: .
command: /bin/bash /etc/init.d/pycharm_license start
ports:
- "1337:1337"
注意:我将/etc/init.d
命令名称更改为更容易记住的名称。
注意2:我是Docker的新手。我想把它添加到Docker中心,因为我花了一些时间来制作它。但是还有很多我还不知道的事情,比如如何让用户输入配置参数(即不同的用户需要不同的二进制文件)。
如果有人想将其转换为Docker镜像并将其放在集线器上,请随意这样做。我在这里上传了gist
:
https://gist.github.com/entheologist/42a6f6bb305897b16d1d1d6c4a9d7360