前言
国庆在家容易想些有的没的, 想着万一以后自己开了一个小型视效工作室, 该用什么来进行跟踪管理项目进度。
首先是想到的当然是诸如Shotgun, FTrack, CGTeamWork等这些项目管理平台。但是价格上则让人却步,比如Shotgun收费标准是每人每月30刀。
这对于小型低成本工作室,也算是一笔不小的开销。抱着能省则省的态度,在网上找到了开源免费的项目管理平台CGWire
CGWire介绍
文字不如视频直观,下面是官方的视频介绍, 可以说是麻雀虽小,该有的功能都有。
CGWire搭建
接下来就是无趣的代码部分了,如果想先尝试下这个管理平台的功能。这里有一个我已经搭建好的,可以访问 lingyunfx.com 查看。
登陆的账号密码请关注我的公众号lingyunfx,回复cgwire即可获取。
(私心给自己公众号做个广告哈哈)
我这里使用的是Ubuntu 16.04版本进行的测试。
搭建的代码内容过多,电脑端可以在我的博客进行浏览:
https://zhangly.com/?p=418
安装软件依赖
sudo apt-get updatesudo apt-get install postgresql postgresql-client postgresql-server-dev-allsudo apt-get install redis-serversudo apt-get install python3 python3-pipsudo apt-get install gitsudo apt-get install nginxsudo apt-get install ffmpeg
获取资源
创建一个zou用户
sudo useradd --home /opt/zou zoumkdir /opt/zouchown zou: /opt/zou
安装zou和其依赖
sudo pip3 install virtualenvcd /opt/zousudo virtualenv zouenv. zouenv/bin/activatesudo zouenv/bin/pip3 install zousudo chown -R zou:www-data .
创建存储预览的文件夹
sudo mkdir /opt/zou/previewssudo chown -R zou:www-data /opt/zou
安装Postgres数据库
在postgres中创建Zou数据库
sudo su -l postgrespsql -c 'create database zoudb;' -U postgres
为postgres用户设置密码
# 输入命令psql# 这里会进入postgres的交互模式>>> psql (9.4.12)>>> Type "help" for help.# 输入下面命令进行密码创建postgres=# \password postgresEnter new password:Enter it again:# 设置完成密码,退出交互模式\q
如果不想使用交互式创建密码,可以用下面的方式。如果已经创建了密码,跳过此步骤。
psql -U postgres -d postgres -c "alter user postgres with password 'mysecretpassword';"
最后,创建数据库表。这里需注意已经退出了psql交互模式,并在zou虚拟环境下。
# Run it in your bash console.DB_PASSWORD=yourdbpassword zou init_db
准备键值存储
vim /etc/sysctl.conf
在这个文件末尾添加一行: vm.overcommit_memory=1
配置Gunicorn
需要通过Gunicorn运行该应用程序, Gunicorn是将zou作为守护程序运行的WSGI服务器。
创建配置文件夹
sudo mkdir /etc/zou
创建Gunicorn配置文件 路径:/etc/zou/gunicorn.conf
accesslog = "/opt/zou/logs/gunicorn_access.log"errorlog = "/opt/zou/logs/gunicorn_error.log"workers = 3worker_class = "gevent"
创建日志文件夹
sudo mkdir /opt/zou/logssudo chown zou: /opt/zou/logs
创建进程守护的配置文件 路径: /etc/systemd/system/zou.service
这里需要修改DBPASSWORD和SECRETKEY。数据库的密码是之前设置的,而SECRET_KEY可以用pwgen来随机生成。
apt-get install pwgenpwgen 16
生成后可以复制其中一个给到SECRET_KEY
[Unit]Description=Gunicorn instance to serve the Zou APIAfter=network.target[Service]User=zouGroup=www-dataWorkingDirectory=/opt/zou# Append DB_USERNAME=username DB_HOST=server when default values aren't used# ffmpeg must be in PATHEnvironment="DB_PASSWORD=yourdbpassword"Environment="SECRET_KEY=yourrandomsecretkey"Environment="PATH=/opt/zou/zouenv/bin:/usr/bin"Environment="PREVIEW_FOLDER=/opt/zou/previews"ExecStart=/opt/zou/zouenv/bin/gunicorn -c /etc/zou/gunicorn.conf -b 127.0.0.1:5000 zou.app:app[Install]WantedBy=multi-user.target```创建事件流API服务器配置路径: /etc/zou/gunicorn-events.conf```accesslog = "/opt/zou/logs/gunicorn_events_access.log"errorlog = "/opt/zou/logs/gunicorn_events_error.log"workers = 1worker_class = "geventwebsocket.gunicorn.workers.GeventWebSocketWorker"
创建事件流API服务器配置 路径: /etc/zou/gunicorn-events.conf
accesslog = "/opt/zou/logs/gunicorn_events_access.log"errorlog = "/opt/zou/logs/gunicorn_events_error.log"workers = 1worker_class = "geventwebsocket.gunicorn.workers.GeventWebSocketWorker"
通过Systemd来守护事件流API服务进程
路径: /etc/systemd/system/zou-events.service
[Unit]Description=Gunicorn instance to serve the Zou Events APIAfter=network.target[Service]User=zouGroup=www-dataWorkingDirectory=/opt/zou# Append DB_USERNAME=username DB_HOST=server when default values aren't usedEnvironment="PATH=/opt/zou/zouenv/bin"ExecStart=/opt/zou/zouenv/bin/gunicorn -c /etc/zou/gunicorn-events.conf -b 127.0.0.1:5001 zou.event_stream:app[Install]WantedBy=multi-user.target
配置Nginx
配置文件路径: /etc/nginx/sites-available/zou
server { listen 80; server_name server_domain_or_IP; location /api { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:5000/; client_max_body_size 500M; proxy_connect_timeout 600s; proxy_send_timeout 600s; proxy_read_timeout 600s; send_timeout 600s; } location /socket.io { proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_pass http://localhost:5001; }}
启用nginx
# 删除默认配置sudo rm /etc/nginx/sites-enabled/default# 创建文件链接sudo ln -s /etc/nginx/sites-available/zou /etc/nginx/sites-enabled# 重启nginxsudo service zou startsudo service zou-events startsudo service nginx restart
更新所有包
更新zou软件包
cd /opt/zou. zouenv/bin/activatesudo zouenv/bin/pip3 install --upgrade zou
更新数据库架构
# 这里输入数据库的密码DB_PASSWORD=yourdbpassword zou upgrade_db
重启zou服务
sudo chown -R zou:www-data .sudo service zou restartsudo service zou-events restart
部署Kitsu
cd /opt/sudo git clone -b build https://github.com/cgwire/kitsucd kitsusudo git checkout buildsudo chown -R zou:www-data /opt/kitsu
部署完成后需要更新nginx的配置
server { listen 80; server_name server_domain_or_IP; location /api { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://localhost:5000/; } location /socket.io { proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_pass http://localhost:5001; } location / { autoindex on; root /opt/kitsu/dist; try_files $uri $uri/ /index.html; }}
重启nginx服务
sudo service nginx restart
到这一步就可以访问自己的ip或者域名来使用cgwire了。
当然,在此之前需要一个管理员账户来登陆cgwire。
创建cgwire管理员账户
# 首先进入zou环境cd /opt/zou. zouenv/bin/activate# 创建管理员账户 create_admin后的参数 为自己的登陆邮箱DB_PASSWORD=yourdbpassword zou create_admin adminemail@yourstudio.com# 初始化数据DB_PASSWORD=yourdbpassword zou init_data
账户创建完成后,默认密码为default,
第一次登陆后会强制让你修改密码。
最后请尽情的enjoy it。