手動部署Archery教程

【Part1:安裝】
環境信息

1、os:CentOS Linux release 7.8.2003 (Core)
2、python:Python 3.6.5
3、redis:Redis server v=5.0.11
https://my.oschina.net/guiguketang/blog/3043486
4、mysql:mysql  Ver 14.14 Distrib 5.7.33
https://my.oschina.net/guiguketang/blog/4966611

1、安裝Python和virtualenv
編譯安裝

# 安裝依賴
yum install wget gcc make zlib-devel openssl openssl-devel 
wget "https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz" 
tar -xvJf Python-3.6.5.tar.xz 
# 編譯
cd Python-3.6.5 
./configure prefix=/usr/local/python3 
make && make install 
ln -fs /usr/local/python3/bin/python3 /usr/bin/python3 
ln -fs /usr/local/python3/bin/pip3 /usr/bin/pip3 
# virtualenv
pip3 install virtualenv -i https://mirrors.ustc.edu.cn/pypi/web/simple/ 
ln -fs /usr/local/python3/bin/virtualenv /usr/bin/virtualenv 

2、準備虛擬環境

# 編譯安裝python的使用
virtualenv venv4archery --python=python3
# 切換python運行環境到虛擬環境
source venv4archery/bin/activate

3、下載最新release包,安裝依賴庫

wget "https://github.com/hhyo/archery/archive/v1.8.0.tar.gz"
tar -xzvf v1.8.0.tar.gz

# 安裝系統依賴
yum -y install gcc gcc-c++ python-devel mysql-devel openldap-devel unixODBC-devel gettext

# 安裝依賴庫
cd archery-1.8.0
pip3 install -r requirements.txt -i https://mirrors.ustc.edu.cn/pypi/web/simple/ 

# 如果使用yum安裝的python3,安裝mysqlclient可能提示提示缺少Python.h,可安裝
yum -y install python36-devel

4、準備MySQL、Redis實例

  • MySQL推薦版本>=5.6
    手動創建db,dbname爲archery
  • Redis提供任務隊列和緩存

5、MySQL配置

建議MySQL版本5.6以上

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'archery', # 數據庫名稱
        'USER': 'root', # 數據庫用戶
        'PASSWORD': '', # 數據庫密碼
        'HOST': '127.0.0.1', # 數據庫HOST,如果是docker啓動並且關聯,可以使用容器名連接
        'PORT': '3306',  # 數據庫端口
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", # SQL_MODE,爲了兼容select * group by,可以按需調整
            'charset': 'utf8mb4'
        },
        'TEST': {
            'NAME': 'test_archery',
            'CHARSET': 'utf8mb4',
        },
    }
}

6、緩存配置

緩存使用redis,可參考 django_redis 文檔 http://django-redis-chs.readthedocs.io/zh_CN/latest/

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0", # redis://host:port/db
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": ""

        }
    }
}

7、啓動準備

# 數據庫初始化
python3 manage.py makemigrations sql
python3 manage.py migrate 

# 數據初始化
python3 manage.py dbshell<sql/fixtures/auth_group.sql
python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql

# 創建管理用戶
python3 manage.py createsuperuser

8、archery手動啓動服務
runserver啓動(僅作爲本地測試)
source /opt/venv4archery/bin/activate
#啓動Django-Q,需保持後臺運行
python3 manage.py qcluster &
#啓動服務
python3 manage.py runserver 0.0.0.0:9123  --insecure  &

訪問地址:
http://ip:9123
如果啓動成功,但無法訪問,看一下防火牆是不是處於開啓狀態。
以上就是手動安裝archery的quanguoc

【Part2:管理系統配置】
1、語法檢測goinception配置參考




ps:
異常一、數據庫初始化異常

手動配置的話,需要自己創建數據庫
執行python3 manage.py migrate
出現數據庫初始化異常
原因是數據庫編碼的問題,創建庫的時候設置編碼即可
mysql> show global variables like '%character%';
mysql> drop database archery;
mysql> create database archery default character set utf8;

(venv4archery) [root@localhost Archery-1.8.0]# python3 manage.py migrate 
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, django_q, sessions, sql
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sql.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying django_q.0001_initial... OK
  Applying django_q.0002_auto_20150630_1624... OK
  Applying django_q.0003_auto_20150708_1326... OK
  Applying django_q.0004_auto_20150710_1043... OK
  Applying django_q.0005_auto_20150718_1506... OK
  Applying django_q.0006_auto_20150805_1817... OK
  Applying django_q.0007_ormq... OK
  Applying django_q.0008_auto_20160224_1026... OK
  Applying django_q.0009_auto_20171009_0915... OK
  Applying django_q.0010_auto_20200610_0856... OK
  Applying django_q.0011_auto_20200628_1055... OK
  Applying django_q.0012_auto_20200702_1608... OK
  Applying django_q.0013_task_attempt_count... OK
  Applying sessions.0001_initial... OK
Traceback (most recent call last):
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/src/archery/venv4archery/lib64/python3.6/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/src/archery/venv4archery/lib64/python3.6/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/src/archery/venv4archery/lib64/python3.6/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1366, "Incorrect string value: '\\xE6\\x85\\xA2\\xE6\\x97\\xA5...' for column 'name' at row 1")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/core/management/base.py", line 85, in wrapped
    res = handle_func(*args, **kwargs)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 268, in handle
    self.verbosity, self.interactive, connection.alias, apps=post_migrate_apps, plan=plan,
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/core/management/sql.py", line 54, in emit_post_migrate_signal
    **kwargs
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 179, in send
    for receiver in self._live_receivers(sender)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 179, in <listcomp>
    for receiver in self._live_receivers(sender)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/contrib/auth/management/__init__.py", line 83, in create_permissions
    Permission.objects.using(using).bulk_create(perms)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/models/query.py", line 507, in bulk_create
    objs_without_pk, fields, batch_size, ignore_conflicts=ignore_conflicts,
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/models/query.py", line 1277, in _batched_insert
    self._insert(item, fields=fields, using=self.db, ignore_conflicts=ignore_conflicts)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/models/query.py", line 1254, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1397, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/backends/utils.py", line 98, in execute
    return super().execute(sql, params)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/src/archery/venv4archery/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/src/archery/venv4archery/lib64/python3.6/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/src/archery/venv4archery/lib64/python3.6/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/src/archery/venv4archery/lib64/python3.6/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE6\\x85\\xA2\\xE6\\x97\\xA5...' for column 'name' at row 1")


異常二、ModuleNotFoundError: No module named 'Crypto'
解決:
pip3 uninstall crypto
pip3 uninstall pycrypto
pip3 install pycrypto

官網:
https://github.com/hhyo/archery

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章