Compare commits
1 Commits
prod-serve
...
main
Author | SHA1 | Date |
---|---|---|
Aditya Thakral | 0548beb3bb |
|
@ -1,15 +1,15 @@
|
||||||
### Steps to Deploy
|
### Steps to Deploy
|
||||||
- move contents of static/ to /srv/www-csc-links/
|
- move contents of frontend/ to /srv/www-csc-links/
|
||||||
- create a `.env` file in server/ with following contents:
|
- create a `.env` file in backend/ with following contents:
|
||||||
```
|
```
|
||||||
PASSWORD=...
|
PASSWORD=...
|
||||||
PORT=...
|
PORT=...
|
||||||
```
|
```
|
||||||
- Install the pip dependencies. One possible way to do so is to run the following in server/:
|
- run the following in backend/:
|
||||||
```
|
```
|
||||||
python3 -m venv venv
|
python3 -m venv venv
|
||||||
source venv/bin/activate
|
source venv/bin/activate
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
- run server.py in server/ (with the pip dependencies installed)
|
- run python app in backend/ (with the virtual env activated)
|
||||||
- edit the `.htaccess` file in /srv/www-csc-links/ to point to the running python application
|
- edit the `.htaccess` file in /srv/www-csc-links/ to point to the running python application
|
||||||
|
|
|
@ -18,6 +18,5 @@ types-Jinja2==0.1.0
|
||||||
types-MarkupSafe==0.1.3
|
types-MarkupSafe==0.1.3
|
||||||
types-typing-extensions==3.7.2
|
types-typing-extensions==3.7.2
|
||||||
types-Werkzeug==0.1.1
|
types-Werkzeug==0.1.1
|
||||||
waitress==2.0.0
|
|
||||||
Werkzeug==1.0.1
|
Werkzeug==1.0.1
|
||||||
wrapt==1.12.1
|
wrapt==1.12.1
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
from waitress import serve
|
|
||||||
from main import app, DB_PATH, regen_html, out_path
|
|
||||||
from setup_db import migrate_0
|
|
||||||
import os
|
|
||||||
|
|
||||||
if not os.path.exists(DB_PATH):
|
|
||||||
migrate_0()
|
|
||||||
|
|
||||||
with app.app_context():
|
|
||||||
regen_html(out_path)
|
|
||||||
|
|
||||||
port = int(os.environ.get("PORT") or 3000)
|
|
||||||
serve(app, host='0.0.0.0', port=port)
|
|
|
@ -1,40 +1,36 @@
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import os
|
import os
|
||||||
|
|
||||||
def migrate_0():
|
DB_PATH = os.path.join(os.path.dirname(__file__), 'links.db')
|
||||||
DB_PATH = os.path.join(os.path.dirname(__file__), 'links.db')
|
|
||||||
|
|
||||||
con = sqlite3.connect(DB_PATH)
|
con = sqlite3.connect(DB_PATH)
|
||||||
|
|
||||||
# array of links to store
|
# array of links to store
|
||||||
links = [
|
links = [
|
||||||
('http://csclub.uwaterloo.ca/','CS Club Website',0,0,1),
|
('http://csclub.uwaterloo.ca/','CS Club Website',0,0,1),
|
||||||
('https://www.instagram.com/uwcsclub/','Instagram',0,1,1),
|
('https://www.instagram.com/uwcsclub/','Instagram',0,1,1),
|
||||||
('https://www.facebook.com/uw.computerscienceclub','Facebook',0,2,1),
|
('https://www.facebook.com/uw.computerscienceclub','Facebook',0,2,1),
|
||||||
('http://twitch.tv/uwcsclub','Twitch',0,3,1),
|
('http://twitch.tv/uwcsclub','Twitch',0,3,1),
|
||||||
('http://bit.ly/uwcsclub-yt','YouTube',0,4,1),
|
('http://bit.ly/uwcsclub-yt','YouTube',0,4,1),
|
||||||
]
|
]
|
||||||
|
|
||||||
# SQLite setup
|
# SQLite setup
|
||||||
cur = con.cursor()
|
cur = con.cursor()
|
||||||
|
|
||||||
# test if table already exists
|
# test if table already exists
|
||||||
cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='links'")
|
cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='links'")
|
||||||
if cur.fetchone():
|
if cur.fetchone():
|
||||||
raise Exception('Links table already exists.')
|
raise Exception('Links table already exists.')
|
||||||
else:
|
else:
|
||||||
cur.execute('''CREATE TABLE links (
|
cur.execute('''CREATE TABLE links (
|
||||||
url text NOT NULL,
|
url text NOT NULL,
|
||||||
name text NOT NULL,
|
name text NOT NULL,
|
||||||
clicks int NOT NULL,
|
clicks int NOT NULL,
|
||||||
position int NOT NULL UNIQUE,
|
position int NOT NULL UNIQUE,
|
||||||
active int NOT NULL,
|
active int NOT NULL,
|
||||||
UNIQUE(url, name)
|
UNIQUE(url, name)
|
||||||
)''')
|
)''')
|
||||||
cur.executemany('INSERT INTO links VALUES (?,?,?,?,?)', links)
|
cur.executemany('INSERT INTO links VALUES (?,?,?,?,?)', links)
|
||||||
con.commit()
|
con.commit()
|
||||||
|
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
migrate_0()
|
|
||||||
|
|
14
build.bash
14
build.bash
|
@ -8,11 +8,15 @@ NODE_ENV=production npx tailwindcss-cli@latest build index.in.css -o index.out.c
|
||||||
cd ..
|
cd ..
|
||||||
npm run build && npm run export
|
npm run build && npm run export
|
||||||
cd ..
|
cd ..
|
||||||
mv frontend/out build/static
|
mv frontend/out build/frontend
|
||||||
|
|
||||||
# Backend
|
# Backend
|
||||||
rsync -ax --exclude venv --exclude links.db --exclude .env backend/ build/server
|
cd backend
|
||||||
|
source venv/bin/activate
|
||||||
|
if [ ! -f links.db ]; then
|
||||||
|
python3 setup_db.py
|
||||||
|
fi
|
||||||
|
cd ..
|
||||||
|
rsync -ax --exclude venv backend/ build/backend
|
||||||
|
|
||||||
cp README-deploy.md build/README.md
|
cp README-deploy.md build
|
||||||
|
|
||||||
tar -cf linklist.tar build
|
|
||||||
|
|
|
@ -67,8 +67,8 @@ const Editor: React.FC<EditorProps> = ({ links, setLinks }) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col bg-gray-100 md:h-full md:flex-row">
|
<div className="flex flex-col bg-gray-100 md:flex-row">
|
||||||
<div className="space-y-4 md:w-3/5 md:border-r md:border-gray-300 md:overflow-y-scroll">
|
<div className="space-y-4 md:w-3/5 md:border-r md:border-gray-300">
|
||||||
<div className="m-8">
|
<div className="m-8">
|
||||||
<button
|
<button
|
||||||
className="block flex py-2 items-center justify-center rounded-lg bg-purple-600 hover:bg-purple-500 cursor-pointer text-white w-full"
|
className="block flex py-2 items-center justify-center rounded-lg bg-purple-600 hover:bg-purple-500 cursor-pointer text-white w-full"
|
||||||
|
@ -133,7 +133,7 @@ const Editor: React.FC<EditorProps> = ({ links, setLinks }) => {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mb-8 md:none" />
|
<div className="mb-8 md:none" />
|
||||||
<div className="flex items-center justify-center md:w-2/5">
|
<div className="flex m-14 justify-center md:w-2/5">
|
||||||
<Preview links={editableLinks.filter((link) => link.active)} />
|
<Preview links={editableLinks.filter((link) => link.active)} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue