<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Web-Dev on The Edge Cases</title>
    <link>https://www.kylestratis.com/tags/web-dev/</link>
    <description>Recent content in Web-Dev on The Edge Cases</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>© 2025</copyright>
    <lastBuildDate>Fri, 18 Sep 2026 22:04:36 -0400</lastBuildDate>
    <atom:link href="https://www.kylestratis.com/tags/web-dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Deploying a Flask App to AWS Elastic Beanstalk with CDK and With the AWS Console</title>
      <link>https://www.kylestratis.com/notes/deploying-a-flask-app-to-aws-elastic-beanstalk-with-cdk-and-with-the-aws-console/</link>
      <pubDate>Mon, 27 Feb 2023 14:40:39 +0000</pubDate>
      <guid>https://www.kylestratis.com/notes/deploying-a-flask-app-to-aws-elastic-beanstalk-with-cdk-and-with-the-aws-console/</guid>
      <description>&lt;h2 id=&#34;steps-in-cdk&#34;&gt;Steps in CDK&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Initialize construct&lt;/li&gt;&#xA;&lt;li&gt;Zip flask code&lt;/li&gt;&#xA;&lt;li&gt;Set up options for application, env vars, and app version&lt;/li&gt;&#xA;&lt;li&gt;Set environment&lt;/li&gt;&#xA;&lt;li&gt;Make sure environment is built &lt;em&gt;after&lt;/em&gt; CDK application&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Deploy to ElasticBeanstalkanstalk-application-packaging-through-cdk-in-typescript-e91b7ffe4928&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyApp&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;elb_flask_app &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; elb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CfnApplication(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    self, &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;flask-appserver&amp;#34;&lt;/span&gt;, application_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;app_name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Move app code into S3 for ELB&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;elb_archive &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s3_assets&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Asset(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    self,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;elb-flask-app-&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;stage&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    path&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;str(Path(__file__)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;absolute()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;parents[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;])&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/app.zip&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Set OptionSettingProperties&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;option_setting_properties &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    elb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CfnEnvironment&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;OptionSettingProperty(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        namespace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aws:autoscaling:launchconfiguration&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;InstanceType&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        value&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;t3.small&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    elb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CfnEnvironment&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;OptionSettingProperty(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        namespace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aws:autoscaling:launchconfiguration&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;IamInstanceProfile&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        value&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aws-elasticbeanstalk-ec2-role&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    elb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CfnEnvironment&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;OptionSettingProperty(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        namespace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aws:autoscaling:launchconfiguration&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;IamInstanceProfile&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        value&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aws-elasticbeanstalk-servicerole&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# This is an example of setting up an environment variable&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    elb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CfnEnvironment&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;OptionSettingProperty(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        namespace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aws:elasticbeanstalk:application:environment&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ES_DOMAIN&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        value&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;es_domain&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;domain_endpoint,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Set app version properties&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_version_props &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; elb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CfnApplicationVersion(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    self,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AppVersion-&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;stage&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    application_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;app_name,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    source_bundle&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;elb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CfnApplicationVersion&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;SourceBundleProperty(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s3_bucket&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;elb_archive&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;s3_bucket_name,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s3_key&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;elb_archive&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;s3_object_key,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Set environment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;elb_env &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; elb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CfnEnvironment(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    self,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;elb-env&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    environment_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;elb-env&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    application_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;app_name,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    solution_stack_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;64bit Amazon Linux 2 v3.2.1 running Python 3.8&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    option_settings&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;option_setting_properties,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    version_label&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;app_version_props&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ref,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Ensure the env isn&amp;#39;t built before the app by placing this at the end of your CDK stack file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_version_props&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_depends_on(elb_flask_app)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;elb_env&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_depends_on(elb_flask_app)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;steps-in-aws-console&#34;&gt;Steps in AWS Console&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Launch EC2 instance&lt;/li&gt;&#xA;&lt;li&gt;SSH into it,&lt;/li&gt;&#xA;&lt;li&gt;Set up Git keys&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&#34;&gt;See here&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add &lt;a href=&#34;https://docs.github.com/en/developers/overview/managing-deploy-keys#deploy-keys&#34;&gt;deploy key&lt;/a&gt; to repo&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Pull code from Github into instance&lt;/li&gt;&#xA;&lt;li&gt;Run Flask server&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Activate virutal environment&lt;/li&gt;&#xA;&lt;li&gt;Install dependencies with &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Set environment variables:&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;FLASK_ENV=development&lt;/code&gt; or &lt;code&gt;FLASK_ENV=prod&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Set up &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04&#34;&gt;uWSGI&lt;/a&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install &lt;code&gt;gcc&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Install uWSGI with &lt;code&gt;pip install uwsgi&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Install NGinx &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04&#34;&gt;source&lt;/a&gt;&#xA;1. Only do steps 1 and 2 from article:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install nginx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Test firewall&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ufw app list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ufw allow &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Nginx HTTP&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ufw status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Set up uWSGI configuration with &lt;code&gt;app.ini&lt;/code&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[uwsgi]&#xA;module = wsgi:app&#xA;master = true&#xA;processes = 5&#xA;socket = myproject.sock&#xA;chmod-socket = 660&#xA;vacuum = true&#xA;die-on-term = true&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;Set up system profile file &lt;code&gt;/etc/systemd/system/myproject.service&lt;/code&gt;, taken from linked article&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Unit&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Description=uWSGI&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;instance&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;serve&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;myproject&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;After=network.target&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Service&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;User=sammy&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Group=www-data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;WorkingDirectory=/home/sammy/myproject&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Environment=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PATH=/home/sammy/myproject/myprojectenv/bin&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;ExecStart=/home/sammy/myproject/myprojectenv/bin/uwsgi&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;--ini&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;myproject.ini&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Install&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;WantedBy=multi-user.target&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Start with &lt;code&gt;systemctl&lt;/code&gt;:&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;sudo systemctl start myproject&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;sudo systemctl enable myproject&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Set up nginx&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Edit &lt;code&gt;/etc/nginx/sites-available/myapp&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;80;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;EC2&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;domain&amp;gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;uwsgi_params;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;uwsgi_pass&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;unix:/home/ubuntu/myapp/flask-app/myapp.sock;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Then link: &lt;code&gt;sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled&lt;/code&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Restart nginx service:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update firewall rules&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo ufw delete allow &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo ufw allow &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Nginx Full&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html&#34;&gt;AWS - Deploying a Flask Application to Elastic Beanstalk&lt;/a&gt;&#xA;&lt;a href=&#34;https://medium.com/@joshmustill/complete-node-js-aws-elastic-beanstalk-application-packaging-through-cdk-in-typescript-e91b7ffe4928&#34;&gt;Packaging a NodeJS application with CDK on Elastic Beanstalk&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo Project Architecture</title>
      <link>https://www.kylestratis.com/notes/hugo-project-architecture/</link>
      <pubDate>Tue, 13 Sep 2022 01:34:20 +0000</pubDate>
      <guid>https://www.kylestratis.com/notes/hugo-project-architecture/</guid>
      <description>&lt;h2 id=&#34;page-bundles&#34;&gt;Page Bundles&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.kylestratis.com/notes/personal-site-redesign/#r3l76i&#34;&gt;Personal Site Redesign&lt;/a&gt;&#xA;&lt;a href=&#34;https://www.kylestratis.com/notes/personal-site-redesign/#505b0f&#34;&gt;Personal Site Redesign&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;content-sections&#34;&gt;Content Sections&lt;/h2&gt;&#xA;&lt;p&gt;Any directories within &lt;code&gt;content/&lt;/code&gt; define a different content section such as posts, tutorials, etc. These directories are also used to determine a page&amp;rsquo;s content type, which can affect how the page is displayed, which &lt;a href=&#34;https://www.kylestratis.com/notes/hugo-archetypes/&#34;&gt;archetype&lt;/a&gt; applies, and more&lt;/p&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.kylestratis.com/notes/personal-site-redesign/#osbj77&#34;&gt;Content sections source note&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Flask-Tables Variable Names Must Match Fields</title>
      <link>https://www.kylestratis.com/notes/flask-tables-variable-names-must-match-fields/</link>
      <pubDate>Thu, 01 Sep 2022 20:00:21 +0000</pubDate>
      <guid>https://www.kylestratis.com/notes/flask-tables-variable-names-must-match-fields/</guid>
      <description>&lt;p&gt;When setting up a table with Flask-Tables, the variable names for the columns must match those in the database the table is pulling from. Alternative column names can be passed in as a parameter.&lt;/p&gt;&#xA;&lt;h2 id=&#34;source&#34;&gt;Source&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://flask-table.readthedocs.io/en/stable/#quick-start&#34;&gt;Flask-Tables Documentation&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>REST API Best Practices</title>
      <link>https://www.kylestratis.com/notes/rest-api-best-practices/</link>
      <pubDate>Tue, 07 Jun 2022 15:50:53 +0000</pubDate>
      <guid>https://www.kylestratis.com/notes/rest-api-best-practices/</guid>
      <description>&lt;h2 id=&#34;path-vs-request-parameters&#34;&gt;Path vs. Request Parameters&lt;/h2&gt;&#xA;&lt;p&gt;Path parameters (&lt;code&gt;/item&lt;/code&gt;) identify a specific resource(s), while request parameters (&lt;code&gt;/item?color=blue&lt;/code&gt;) should act to filter items of that resource.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/30967822/when-do-i-use-path-params-vs-query-params-in-a-restful-api&#34;&gt;Path vs. Request Parameters&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
