摘要訊息 : 使用 DCRM 建構 Cydia 個人源.

0. 前言

本篇文章虽然稍微照顾了第一次建立 Python 网站的人, 但是依然建立在你需要 Cydia 个人源以及你已经有搭建 Python 网站和熟悉 CentOS 7 命令的情况下写出, 如有不便, 可以直接评论留言或者自行 Google 解决.

DCRM 需要大家安装 MySQL.

本文于 2022 年 3 月 18 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.

1. 安装

如果没有安装 git 的, 需要执行指令 yum install -y git. 进入网站根目录 cd /www, 将项目 Clone 到本地 : git clone https://github.com/82Flex/DCRM.git. 根据个人习惯, 重命名为 cydia : mv DCRM cydia.

进入 cydia 目录 : cd cydia, 里面大概长这样 :

Figure 1. DCRM 结构

首先安装依赖套件 : pip install -r requirements.txt. 安装相关依赖, 中间过程持续较长, 不要关闭 ssh 窗口或者强行停止. 最后如果看到 Successfully installed ..., 就说明安装完成. 注意, 中间可能有红色的错误, 需要大家自行修复.

然后输入 mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -u root -p, 期间会让你输入 MySQL 的 root 用户密码.

在官方给出的说明文档中, Redis 和 Memcached 设为推荐, 于是我们安装 yum install -y redis memcached. 然后设置启动 :

systemctl start memcached
systemctl start redis
systemctl enable memcached
systemctl enable redis

继续安装依赖套件 : pip install rq Pillow exifread.

接下来配置 Redis : redis-cli, 给 Redis 设置密码 CONFIG SET requirepass "改为你的密码", 完成之后退出 exit.

接下来修改 DCRM 配置文件. 进入 DCRM 档案夹 : cd DCRM. 首先拷贝一份配置文件, 因为默认给出的是样板, 这里不建议用 mv 命令 : cp settings.default.py settings.py, vim settings.py. 找到 ENABLE_REDIS, ENABLE_CACHEENABLE_SCREENSHOT, 把后面的 False 改为 True. 找到 ALLOWED_HOSTS, 修改为

ALLOWED_HOSTS = [
    '你的域名'
]

找到 LANGUAGE_CODE, 默认 "en" 为英文, 可以改为想要的语言. 目前官方给出的, 本人仔细看了一下, 暂时只有 ;"en"和 "zh_Hans", 不过看起来中文好像并不生效, 希望有生效留下评论. 找到 TIME_ZONE, 改为 "Asia/Hong_Kong" 或者改为你想要的地区. 找到 DATABASES, 这个是 MySQL 数据库的配置, 将 NAME, USERPASSWORD 改为你自己的 MySQL 配置. 找到 RQ_QUEUES 并且设置 PASSWORD 项. 在此之前, 你需要创建一个数据库或者使用现有的数据库.

到这里为止, 配置文件修改完成, 返回上一层目录 cd ... 接下来执行 :

./manage.py collectstatic
./manage.py migrate
./manage.py createsuperuser

会让你创建超级用户

完成上述步骤之后, 我们把 uwsgi.ini 放在 DCRM 目录 : cd DCRM. 创建 uwsgi.ini : vim uwsgi.ini, 写入以下配置 :

[uwsgi]

chdir = /www/cydia
module = DCRM.wsgi
master = true
processes = 4
socket = :8001
vaccum = true
uid = nginx
gid = nginx

确保伺服器的 8001 连接埠没有被其它应用程式占用, 否则会产生错误.

配置 Nginx, 下面是一份 Nginx 示例文件, 根据自己的实际配置进行修改 :

upstream django {
    server 127.0.0.1:8001;
}
server {
    listen 80;
    server_name apt.jonny.vip;
    rewrite ^/(.*)$ https://你的网域名称/$1 permanent;
}
server {
    listen 443 ssl;
    ssl_certificate 域名 SSL CRT 档案位置;
    ssl_certificate_key 域名 SSL KEY 档案位置;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    ssl_prefer_server_ciphers on;
    server_name 你的域名;
    root /www/cydia;    #你的网站根目录, 下面含有 "/www/root/DCRM" 的都需要修改为这个 root 目录
    error_page 497 https://$host$uri?$args;
    server_name_in_redirect off;
    index index.html index.htm;
    location = / {
        rewrite ^ /index/ last;
    }
    location / {
        try_files $uri $uri/ @djangosite;
    }
    location ~^/static/(.*)$ {
        alias /www/cydia/WEIPDCRM/static/$1;
    }
    location ~^/resources/(.*)$ {
        alias /www/cydia/resources/$1;
    }
    location ~^/((CydiaIcon.png)|(Release(.gpg)?)|(Packages(.gz|.bz2)?))$ {
        alias /www/cydia/resources/releases/$1;
    }
    location @djangosite {
        uwsgi_pass django;
        include /etc/nginx/uwsgi_params;
    }
    location ~* .(ico|gif|bmp|jpg|jpeg|png|swf|js|css|mp3|m4a|m4v|mp4|ogg|aac)$ {
        expires 30d;
        valid_referers none blocked 改为 *.你的网站域名 127.0.0.1 localhost;
        if ($invalid_referer) {
            return 403;
        }
    }
}

接下来启动 : uwsgi --ini uwsgi.ini --daemonize=/dev/null, 访问网站便可以看到 :

Figure 2. 安装完成

最后配置 GnuPG : yum install -y gnupg2. 执行 gpg --gen-key, 根据提示创建密钥, 过程可能需要比较长时间, 不要直接结束或者关闭 ssh 会话窗口. 启动后台队列进程 :

nohup ./manage.py rqworker high > /dev/null &
nohup ./manage.py rqworker default > /dev/null &

至此, 基本的安装完成, 不过经过初步的尝试, 好像还是有很多问题的. 这里直接给出官方的使用说明好了, 有精力、有设备的同学可以继续研究 :

  1. WEIPDCRM -> Settings;
  2. Sites: Set domains and site names;
  3. WEIPDCRM -> Releases: Add a new release and set it as an active release;
  4. WEIPDCRM -> Sections: Add sections;
  5. Upload: Upload deb files;
  6. WEIPDCRM -> Versions: Enable Packages and assign them into sections;
  7. WEIPDCRM -> Builds: Build the repository to apply all the changes.