Skip to content
This repository has been archived by the owner on Feb 16, 2023. It is now read-only.

Commit

Permalink
V0.3 update
Browse files Browse the repository at this point in the history
  • Loading branch information
Mon-ius committed Feb 17, 2019
1 parent b84c8cf commit efe57e4
Show file tree
Hide file tree
Showing 19 changed files with 598 additions and 105 deletions.
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"python.formatting.provider": "black",
"python.pythonPath": "/opt/anaconda3/envs/fk/bin/python",
"python.pythonPath": "/Users/monius/anaconda3/envs/fk/bin/python",
"python.linting.pylintEnabled": false
}
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ change directory to your flask project

## Features

### DNS support

- cloudflare
- aliyun

### Server support

- NGINX
Expand Down Expand Up @@ -151,6 +156,14 @@ Suppose location : `/opt/anaconda3`
- conda install -c conda-forge gevent
- conda install -c conda-forge uwsgi

## Update

- Version 0.3 Feb 17,2019
- add new dns ssl generation: aliyun
- add separate `test` folder
- add number validation
- change logic -> <domain,dns_options,docker> <OP1,OP2>

## MIT License

Copyright (c) 2018 Monius
Expand Down
3 changes: 2 additions & 1 deletion flaskdeploy/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

uWSGI = os.path.join(path_to_module, "data", "uwsgi_config.ini")
NGINX = os.path.join(path_to_module, "data", "nginx_config.conf")
SSL = os.path.join(path_to_module, "data", "ssl_script.sh")
SSL = os.path.join(path_to_module, "data", "multi_ssl.sh")
# SSL = os.path.join(path_to_module, "data", "ssl_script.sh")
SERVICE = os.path.join(path_to_module, "data", "systemd_script.service")
DOCKER = os.path.join(path_to_module, "data", "docker_config.run")
# uWSGI = "./"
Expand Down
6 changes: 3 additions & 3 deletions flaskdeploy/data/docker_config.run
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
docker run --name {{domain}} -d -p 5432:5432 \
-v ~/{{domain}}:/var/lib/postgresql/data \
-e POSTGRES_DB={{domain}} -e POSTGRES_USER={{usr}} -e POSTGRES_PASSWORD='{{domain}}' \
docker run --name {{DOMAIN}} -d -p 5432:5432 \
-v ~/{{DOMAIN}}:/var/lib/postgresql/data \
-e POSTGRES_DB={{DOMAIN}} -e POSTGRES_USER={{usr}} -e POSTGRES_PASSWORD='{{DOMAIN}}' \
postgres:latest
12 changes: 12 additions & 0 deletions flaskdeploy/data/multi_ssl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export {{OP1}}
export {{OP2}}

sudo apt install socat -y

sudo wget -O - https://get.acme.sh | sh

sudo ~/.acme.sh/acme.sh --force --issue -d "*.{{DOMAIN}}" -d "{{DOMAIN}}" --dns {{DNS_OP}} \
--cert-file /etc/nginx/certs/site.crt \
--key-file /etc/nginx/certs/site.key \
--fullchain-file /etc/nginx/certs/fullchain.crt \
--ca-file /etc/nginx/certs/ca.crt
8 changes: 4 additions & 4 deletions flaskdeploy/data/nginx_config.conf
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
server {
listen 443;
server_name {{domain}};
server_name {{DOMAIN}};
ssl on;
ssl_certificate certs/fullchain.crt;
ssl_certificate_key certs/site.key;

access_log {{loc}}/{{domain}}.access.log;
error_log {{loc}}/{{domain}}.error.log;
access_log {{loc}}/{{DOMAIN}}.access.log;
error_log {{loc}}/{{DOMAIN}}.error.log;

ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
Expand All @@ -20,6 +20,6 @@ server {
}
server {
listen 80;
server_name {{domain}};
server_name {{DOMAIN}};
return 301 https://$host$request_uri;
}
2 changes: 1 addition & 1 deletion flaskdeploy/data/ssl_script.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ sudo apt install socat -y

sudo wget -O - https://get.acme.sh | sh

sudo ~/.acme.sh/acme.sh --force --issue -d "*.{{domain}}" -d "{{domain}}" --dns dns_cf \
sudo ~/.acme.sh/acme.sh --force --issue -d "*.{{DOMAIN}}" -d "{{DOMAIN}}" --dns dns_cf \
--cert-file /etc/nginx/certs/site.crt \
--key-file /etc/nginx/certs/site.key \
--fullchain-file /etc/nginx/certs/fullchain.crt \
Expand Down
4 changes: 2 additions & 2 deletions flaskdeploy/data/systemd_script.service
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[Unit]
Description={{domain}} Service daemon
Description={{DOMAIN}} Service daemon
After=network.target

[Service]
Expand All @@ -10,7 +10,7 @@ User={{usr}}
Environment="PYTHONHOME=/opt/anaconda3/envs/deploy/"
Environment="PYTHONPATH=/opt/anaconda3/envs/deploy/lib"
WorkingDirectory={{loc}}
ExecStart=/opt/anaconda3/envs/deploy/bin/uwsgi {{domain}}.ini
ExecStart=/opt/anaconda3/envs/deploy/bin/uwsgi {{DOMAIN}}.ini
Restart=on-failure
KillMode=mixed
SendSIGHUP=yes
Expand Down
File renamed without changes.
51 changes: 31 additions & 20 deletions flaskdeploy/scripts/deploy.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,37 @@
from ..validation import *
from ..utils import *

from .dns import *

import subprocess
import getpass
import os

import click

@click.command(context_settings=dict(
allow_extra_args=True
))
@click.option('--email', prompt='Your email', help='Email,Apply ssl certification,CloudFlare.',
callback=validate_email)
@click.option('--key', prompt='Your secret key', help='Secret Key,Apply ssl certification,CloudFlare.')
@click.option('--domain')
@click.pass_context
def miss_tmp(ctx,email, key,domain):
ssl_file_gen(DOMAIN, USR, CUR_LOC, email, key)
raise JumpOutFuckingClick
# @click.command(context_settings=dict(
# allow_extra_args=True
# ))
# @click.option('--email', prompt='Your email', help='Email,Apply ssl certification,CloudFlare.',
# callback=validate_email)
# @click.option('--key', prompt='Your secret key', help='Secret Key,Apply ssl certification,CloudFlare.')
# @click.option('--domain')
# @click.pass_context
# def miss_tmp(ctx,email, key,domain):
# ssl_file_gen(DOMAIN, USR, CUR_LOC, email, key)
# raise JumpOutFuckingClick


@click.command()
@click.option('--domain', prompt='Your domain', help='The domain to be configured.',
callback=validate_domain
)
@click.option('--email', help='Email,Apply ssl certification,CloudFlare.',
callback=validate_email
@click.option('--dns_option', help='DNS option,Apply ssl certification. \n[1]CloudFlare,\n[2]AliYun.',
callback=validate_options
)
@click.option('--key', help='Key,Apply ssl certification,CloudFlare.')
@click.option('--docker', help='Confirm having database or not.')
@click.pass_context
def cli(ctx, domain, email, key,docker):
def cli(ctx, domain, dns_option,docker):
"""Deploy the flask app right now."""
global DOMAIN, USR, CUR_LOC
usr = getpass.getuser()
Expand All @@ -53,17 +54,27 @@ def cli(ctx, domain, email, key,docker):
nginx_file_gen(DOMAIN, USR, CUR_LOC)
service_file_gen(DOMAIN, USR, CUR_LOC)


if not docker:
if not click.confirm('Do you have database already?'):
docker_file_gen(DOMAIN, USR, CUR_LOC)
if not email or not key:
if not dns_option:
if not click.confirm('Do you have SSL certification?'):
try:
miss_tmp()
# miss_tmp()
miss_ssl()
except JumpOutFuckingClick:
pass
else:
ssl_file_gen(DOMAIN, USR, CUR_LOC, email, key)

script_files_gen(DOMAIN, USR, CUR_LOC)
if(str(dns_option)=="1"):
try:
op_cf()
except JumpOutFuckingClick2:
pass
if(str(dns_option)=="2"):
try:
op_ali()
except JumpOutFuckingClick2:
pass

script_files_run(DOMAIN, USR, CUR_LOC)
62 changes: 62 additions & 0 deletions flaskdeploy/scripts/dns.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
from config import *
from validation import *
from utils import *

import subprocess
import getpass
import os
import click

@click.command(context_settings=dict(
allow_extra_args=True
))
@click.option('--dns_type', prompt='Service options. \n [1] CloudFlare \n [2] AliYun \n\n\nYour Choice')
@click.pass_context
def miss_ssl(ctx,dns_type):
"""
These are available DNS provider servie options. \n
[1] CloudFlare <CF_Email,CF_Key> --dns dns_cf \n
[2] AliYun <Ali_Key,Ali_Secret> --dns dns_ali \n
"""
# if not dns_type:
if(str(dns_type)=="1"):
try:
op_cf()
except JumpOutFuckingClick2:
pass
if(str(dns_type)=="2"):
try:
op_ali()
except JumpOutFuckingClick2:
pass
raise JumpOutFuckingClick


@click.command(short_help='AliYun Option',context_settings=dict(
allow_extra_args=True
))
@click.option('--ali_key', prompt='Ali_Key')
@click.option('--ali_secret', prompt='Ali_Secret')
@click.pass_context
def op_ali(ctx,ali_key,ali_secret):
dns_op = "dns_ali"
op_1 = "Ali_Key={}".format(ali_key)
op_2 = "Ali_Secret={}".format(ali_secret)
ssl_multi_gen(DOMAIN, USR, CUR_LOC, op_1,op_2,dns_op)

raise JumpOutFuckingClick2

@click.command(short_help='CloudFlare Option',context_settings=dict(
allow_extra_args=True
))
@click.option('--cf_email', prompt='CF_Email')
@click.option('--cf_key', prompt='CF_Key')
@click.pass_context
def op_cf(ctx,cf_email,cf_key):
dns_op = "dns_cf"
op_1 = "CF_Email={}".format(cf_email)
op_2 = "CF_Key={}".format(cf_key)
ssl_multi_gen(DOMAIN, USR, CUR_LOC, op_1,op_2,dns_op)

raise JumpOutFuckingClick2

48 changes: 29 additions & 19 deletions flaskdeploy/scripts/generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,36 @@
from ..validation import *
from ..utils import *

from .dns import *

import subprocess
import getpass
import os

import click

@click.command(context_settings=dict(
allow_extra_args=True
))
@click.option('--email', prompt='Your email', help='Email,Apply ssl certification,CloudFlare.',
callback=validate_email)
@click.option('--key', prompt='Your secret key', help='Secret Key,Apply ssl certification,CloudFlare.')
@click.option('--domain')
@click.pass_context
def miss_tmp(ctx,email, key,domain):
ssl_file_gen(DOMAIN, USR, CUR_LOC, email, key)
raise JumpOutFuckingClick
# @click.command(context_settings=dict(
# allow_extra_args=True
# ))
# @click.option('--email', prompt='Your email', help='Email,Apply ssl certification,CloudFlare.',
# callback=validate_email)
# @click.option('--key', prompt='Your secret key', help='Secret Key,Apply ssl certification,CloudFlare.')
# @click.option('--domain')
# @click.pass_context
# def miss_tmp(ctx,email, key,domain):
# ssl_file_gen(DOMAIN, USR, CUR_LOC, email, key)
# raise JumpOutFuckingClick

@click.command()
@click.option('--domain', prompt='Your domain', help='The domain to be configured.',
callback=validate_domain
)
@click.option('--email', help='Email,Apply ssl certification,CloudFlare.',
callback=validate_email
@click.option('--dns_option', help='DNS option,Apply ssl certification. \n[1]CloudFlare,\n[2]AliYun.',
callback=validate_options
)
@click.option('--key', help='Key,Apply ssl certification,CloudFlare.')
@click.option('--docker', help='Confirm having database or not.')
@click.pass_context
def cli(ctx, domain, email, key,docker):
def cli(ctx, domain, dns_option,docker):
"""Necessary config.(Just generating)"""
global DOMAIN, USR, CUR_LOC
usr = getpass.getuser()
Expand All @@ -55,12 +56,21 @@ def cli(ctx, domain, email, key,docker):
if not docker:
if not click.confirm('Do you have database already?'):
docker_file_gen(DOMAIN, USR, CUR_LOC)
if not email or not key:
if not dns_option:
if not click.confirm('Do you have SSL certification?'):
try:
miss_tmp()
# miss_tmp()
miss_ssl()
except JumpOutFuckingClick:
pass
else:
ssl_file_gen(DOMAIN, USR, CUR_LOC, email, key)
script_files_gen(DOMAIN, USR, CUR_LOC)
if(str(dns_option)=="1"):
try:
op_cf()
except JumpOutFuckingClick2:
pass
if(str(dns_option)=="2"):
try:
op_ali()
except JumpOutFuckingClick2:
pass
28 changes: 28 additions & 0 deletions flaskdeploy/test/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@

import os

path_to_module = os.path.dirname(__file__)
# Configurations

uWSGI = os.path.join(path_to_module, "..","data", "uwsgi_config.ini")
NGINX = os.path.join(path_to_module, "..","data", "nginx_config.conf")
SSL = os.path.join(path_to_module, "..","data", "multi_ssl.sh")
SERVICE = os.path.join(path_to_module, "..","data", "systemd_script.service")
DOCKER = os.path.join(path_to_module, "..","data", "docker_config.run")
# uWSGI = "./"
# = "./data/"

# = "./data/"
# = "./data/
# = "./data/

# May need to change
NGINX_CONF1 = "/etc/nginx/sites-enabled/"
NGINX_CONF2 = "/etc/nginx/sites-available/"
SYSTEMD_CONF = "/etc/systemd/system/"

# SET ENV

DOMAIN = None
USR = None
CUR_LOC = None

0 comments on commit efe57e4

Please sign in to comment.