diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-04-01 14:54:46 +0100 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-04-01 14:54:46 +0100 |
| commit | 7b2c47a4c3e0992817191bca136fdadc1504f65d (patch) | |
| tree | b283eccf1a23fd4c5b7b24a93738e3f859511a7a | |
| parent | Update configuration to use env files throughout (diff) | |
| download | AnnotateChange-7b2c47a4c3e0992817191bca136fdadc1504f65d.tar.gz AnnotateChange-7b2c47a4c3e0992817191bca136fdadc1504f65d.zip | |
Various fixes to get the app to work in docker
| -rw-r--r-- | Dockerfile | 18 | ||||
| -rw-r--r-- | app/models.py | 4 | ||||
| -rw-r--r-- | boot.sh | 2 | ||||
| -rw-r--r-- | config.py | 10 | ||||
| -rw-r--r-- | migrations/versions/f3622e20dd86_initialize.py | 4 | ||||
| -rw-r--r-- | poetry.lock | 46 | ||||
| -rw-r--r-- | pyproject.toml | 1 |
7 files changed, 69 insertions, 16 deletions
@@ -1,9 +1,12 @@ -FROM python:3.6-alpine +FROM python:3.7-alpine + +RUN apk add gcc musl-dev libffi-dev openssl-dev # This Dockerfile is based on: # https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xix-deployment-on-docker-containers -RUN adduser -D annotatechange +RUN addgroup --gid 1024 mygroup +RUN adduser --ingroup mygroup -D annotatechange WORKDIR /home/annotatechange @@ -20,7 +23,7 @@ ENV YOUR_ENV=${YOUR_ENV} \ RUN pip install "poetry==$POETRY_VERSION" -COPY poetry.lock pyproject.toml /home/annotatechange +COPY poetry.lock pyproject.toml /home/annotatechange/ RUN poetry config settings.virtualenvs.create false \ && poetry install $(test "$YOUR_ENV" == production && echo "--no-dev") \ @@ -33,8 +36,13 @@ RUN chmod +x boot.sh ENV FLASK_APP annotate_change.py -RUN chown -R annotatechange:annotatechange ./ +RUN mkdir -p /home/annotatechange/instance +VOLUME /home/annotatechange/instance + +RUN ls -lh /home/annotatechange/instance + +RUN chown -R annotatechange:mygroup /home/annotatechange USER annotatechange -EXPOSE 80 +EXPOSE 7831 ENTRYPOINT ["./boot.sh"] diff --git a/app/models.py b/app/models.py index 3bc394c..5016505 100644 --- a/app/models.py +++ b/app/models.py @@ -16,7 +16,7 @@ from app import login class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) - email = db.Column(db.String(), unique=True, nullable=False) + email = db.Column(db.String(256), unique=True, nullable=False) password_hash = db.Column(db.String(128), nullable=False) last_active = db.Column( db.DateTime(), nullable=False, default=datetime.datetime.utcnow @@ -70,7 +70,7 @@ class User(UserMixin, db.Model): class Dataset(db.Model): id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(), unique=True, nullable=False) + name = db.Column(db.String(128), unique=True, nullable=False) created = db.Column( db.DateTime, nullable=False, default=datetime.datetime.utcnow ) @@ -13,4 +13,4 @@ while true; do sleep 5 done -exec gunicorn -b :80 --access-logfile - --error-logfile - annotate_change:app +exec gunicorn -b :7831 --access-logfile - --error-logfile - annotate_change:app @@ -17,11 +17,11 @@ class Config(object): DB_TYPE = os.environ.get("DB_TYPE") or "sqlite3" if DB_TYPE == "mysql": SQLALCHEMY_DATABASE_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{database}".format( - username=os.environ.get("MYSQL_USER"), - password=os.environ.get("MYSQL_PASSWORD"), - host=os.environ.get("MYSQL_HOST"), - port=os.environ.get("MYSQL_PORT"), - database=os.environ.get("MYSQL_DATABASE"), + username=os.environ.get("AC_MYSQL_USER"), + password=os.environ.get("AC_MYSQL_PASSWORD"), + host=os.environ.get("AC_MYSQL_HOST"), + port=os.environ.get("AC_MYSQL_PORT"), + database=os.environ.get("AC_MYSQL_DATABASE"), ) else: SQLALCHEMY_DATABASE_URI = "sqlite:///{filepath}".format( diff --git a/migrations/versions/f3622e20dd86_initialize.py b/migrations/versions/f3622e20dd86_initialize.py index 545ca5b..56475bd 100644 --- a/migrations/versions/f3622e20dd86_initialize.py +++ b/migrations/versions/f3622e20dd86_initialize.py @@ -20,7 +20,7 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('dataset', sa.Column('id', sa.Integer(), nullable=False), - sa.Column('name', sa.String(), nullable=False), + sa.Column('name', sa.String(length=128), nullable=False), sa.Column('created', sa.DateTime(), nullable=False), sa.Column('md5sum', sa.String(length=32), nullable=False), sa.PrimaryKeyConstraint('id'), @@ -30,7 +30,7 @@ def upgrade(): op.create_table('user', sa.Column('id', sa.Integer(), nullable=False), sa.Column('username', sa.String(length=80), nullable=False), - sa.Column('email', sa.String(), nullable=False), + sa.Column('email', sa.String(length=256), nullable=False), sa.Column('password_hash', sa.String(length=128), nullable=False), sa.Column('last_active', sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint('id'), diff --git a/poetry.lock b/poetry.lock index 3af79dc..007a034 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,6 +13,14 @@ python-dateutil = "*" python-editor = ">=0.3" [[package]] +category = "main" +description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" +name = "asn1crypto" +optional = false +python-versions = "*" +version = "0.24.0" + +[[package]] category = "dev" description = "Atomic file writes." name = "atomicwrites" @@ -38,6 +46,17 @@ version = "1.4" [[package]] category = "main" +description = "Foreign Function Interface for Python calling C code." +name = "cffi" +optional = false +python-versions = "*" +version = "1.12.2" + +[package.dependencies] +pycparser = "*" + +[[package]] +category = "main" description = "Composable command line interface toolkit" name = "click" optional = false @@ -55,6 +74,19 @@ version = "0.4.1" [[package]] category = "main" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +name = "cryptography" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "2.6.1" + +[package.dependencies] +asn1crypto = ">=0.21.0" +cffi = ">=1.8,<1.11.3 || >1.11.3" +six = ">=1.4.1" + +[[package]] +category = "main" description = "DNS toolkit" name = "dnspython" optional = false @@ -248,6 +280,14 @@ version = "1.8.0" [[package]] category = "main" +description = "C parser in Python" +name = "pycparser" +optional = false +python-versions = "*" +version = "2.19" + +[[package]] +category = "main" description = "JSON Web Token implementation in Python" name = "pyjwt" optional = false @@ -340,16 +380,19 @@ python-versions = "*" version = "2.2.1" [metadata] -content-hash = "a9ea74089171860e4f80393ba29530ec1573224fa2ecbe951229caca3573397e" +content-hash = "17221732a240b9e6bcae8517bb21e2032b8749962fe680f3dfba434f8aea1770" python-versions = "^3.7" [metadata.hashes] alembic = ["505d41e01dc0c9e6d85c116d0d35dbb0a833dcb490bf483b75abeb06648864e8"] +asn1crypto = ["2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87", "9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"] atomicwrites = ["03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", "75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"] attrs = ["69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", "f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"] blinker = ["471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"] +cffi = ["00b97afa72c233495560a0793cdc86c2571721b4271c0667addc83c417f3d90f", "0ba1b0c90f2124459f6966a10c03794082a2f3985cd699d7d63c4a8dae113e11", "0bffb69da295a4fc3349f2ec7cbe16b8ba057b0a593a92cbe8396e535244ee9d", "21469a2b1082088d11ccd79dd84157ba42d940064abbfa59cf5f024c19cf4891", "2e4812f7fa984bf1ab253a40f1f4391b604f7fc424a3e21f7de542a7f8f7aedf", "2eac2cdd07b9049dd4e68449b90d3ef1adc7c759463af5beb53a84f1db62e36c", "2f9089979d7456c74d21303c7851f158833d48fb265876923edcb2d0194104ed", "3dd13feff00bddb0bd2d650cdb7338f815c1789a91a6f68fdc00e5c5ed40329b", "4065c32b52f4b142f417af6f33a5024edc1336aa845b9d5a8d86071f6fcaac5a", "51a4ba1256e9003a3acf508e3b4f4661bebd015b8180cc31849da222426ef585", "59888faac06403767c0cf8cfb3f4a777b2939b1fbd9f729299b5384f097f05ea", "59c87886640574d8b14910840327f5cd15954e26ed0bbd4e7cef95fa5aef218f", "610fc7d6db6c56a244c2701575f6851461753c60f73f2de89c79bbf1cc807f33", "70aeadeecb281ea901bf4230c6222af0248c41044d6f57401a614ea59d96d145", "71e1296d5e66c59cd2c0f2d72dc476d42afe02aeddc833d8e05630a0551dad7a", "8fc7a49b440ea752cfdf1d51a586fd08d395ff7a5d555dc69e84b1939f7ddee3", "9b5c2afd2d6e3771d516045a6cfa11a8da9a60e3d128746a7fe9ab36dfe7221f", "9c759051ebcb244d9d55ee791259ddd158188d15adee3c152502d3b69005e6bd", "b4d1011fec5ec12aa7cc10c05a2f2f12dfa0adfe958e56ae38dc140614035804", "b4f1d6332339ecc61275bebd1f7b674098a66fea11a00c84d1c58851e618dc0d", "c030cda3dc8e62b814831faa4eb93dd9a46498af8cd1d5c178c2de856972fd92", "c2e1f2012e56d61390c0e668c20c4fb0ae667c44d6f6a2eeea5d7148dcd3df9f", "c37c77d6562074452120fc6c02ad86ec928f5710fbc435a181d69334b4de1d84", "c8149780c60f8fd02752d0429246088c6c04e234b895c4a42e1ea9b4de8d27fb", "cbeeef1dc3c4299bd746b774f019de9e4672f7cc666c777cd5b409f0b746dac7", "e113878a446c6228669144ae8a56e268c91b7f1fafae927adc4879d9849e0ea7", "e21162bf941b85c0cda08224dade5def9360f53b09f9f259adb85fc7dd0e7b35", "fb6934ef4744becbda3143d30c6604718871495a5e36c408431bf33d9c146889"] click = ["2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", "5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"] colorama = ["05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", "f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"] +cryptography = ["066f815f1fe46020877c5983a7e747ae140f517f1b09030ec098503575265ce1", "210210d9df0afba9e000636e97810117dc55b7157c903a55716bb73e3ae07705", "26c821cbeb683facb966045e2064303029d572a87ee69ca5a1bf54bf55f93ca6", "2afb83308dc5c5255149ff7d3fb9964f7c9ee3d59b603ec18ccf5b0a8852e2b1", "2db34e5c45988f36f7a08a7ab2b69638994a8923853dec2d4af121f689c66dc8", "409c4653e0f719fa78febcb71ac417076ae5e20160aec7270c91d009837b9151", "45a4f4cf4f4e6a55c8128f8b76b4c057027b27d4c67e3fe157fa02f27e37830d", "48eab46ef38faf1031e58dfcc9c3e71756a1108f4c9c966150b605d4a1a7f659", "6b9e0ae298ab20d371fc26e2129fd683cfc0cfde4d157c6341722de645146537", "6c4778afe50f413707f604828c1ad1ff81fadf6c110cb669579dea7e2e98a75e", "8c33fb99025d353c9520141f8bc989c2134a1f76bac6369cea060812f5b5c2bb", "9873a1760a274b620a135054b756f9f218fa61ca030e42df31b409f0fb738b6c", "9b069768c627f3f5623b1cbd3248c5e7e92aec62f4c98827059eed7053138cc9", "9e4ce27a507e4886efbd3c32d120db5089b906979a4debf1d5939ec01b9dd6c5", "acb424eaca214cb08735f1a744eceb97d014de6530c1ea23beb86d9c6f13c2ad", "c8181c7d77388fe26ab8418bb088b1a1ef5fde058c6926790c8a0a3d94075a4a", "d4afbb0840f489b60f5a580a41a1b9c3622e08ecb5eec8614d4fb4cd914c4460", "d9ed28030797c00f4bc43c86bf819266c76a5ea61d006cd4078a93ebf7da6bfd", "e603aa7bb52e4e8ed4119a58a03b60323918467ef209e6ff9db3ac382e5cf2c6"] dnspython = ["36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01", "f69c21288a962f4da86e56c4905b49d11aba7938d3d740e80d9e366ee4f1632d"] dominate = ["4076735c0745fe771e57b2313dbb4bfeec42731816ee23cee509f66e8912aa51", "4b9fd42d2824b79761799590697db45bf93daad511b130c50513af38da33df9b"] email-validator = ["ddc4b5b59fa699bb10127adcf7ad4de78fde4ec539a072b104b8bb16da666ae5"] @@ -369,6 +412,7 @@ markupsafe = ["00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473" more-itertools = ["0125e8f60e9e031347105eb1682cef932f5e97d7b9a1a28d9bf00c22a5daef40", "590044e3942351a1bdb1de960b739ff4ce277960f2425ad4509446dbace8d9d1"] pluggy = ["19ecf9ce9db2fce065a7a0586e07cfb4ac8614fe96edf628a264b1c70116cf8f", "84d306a647cc805219916e62aab89caa97a33a1dd8c342e87a37f91073cd4746"] py = ["64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", "dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"] +pycparser = ["a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"] pyjwt = ["5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e", "8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"] pymysql = ["3943fbbbc1e902f41daf7f9165519f140c4451c179380677e6a848587042561a", "d8c059dcd81dedb85a9f034d5e22dcb4442c0b201908bede99e306d65ea7c8e7"] pytest = ["3f193df1cfe1d1609d4c583838bea3d532b18d6160fd3f55c9447fdca30848ec", "e246cf173c01169b9617fc07264b7b1316e78d7a650055235d6d897bc80d9660"] diff --git a/pyproject.toml b/pyproject.toml index eebd710..a9d0d9d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ flask-bootstrap = "^3.3" email_validator = "^1.0" gunicorn = "^19.9" pymysql = "^0.9.3" +cryptography = "^2.6" [tool.poetry.dev-dependencies] pytest = "^3.0" |
